---
id: 403
title: Docker部署
---

import useBaseUrl from "@docusaurus/useBaseUrl";
import Tag from "@site/src/components/Tag.js";
import Highlight from '@site/src/components/Highlight.js';

:::important 特别注意

验证码使用SkiaSharp，如果是在 linux 服务下运行则需要安装 libfontconfig1，如 ubuntu 的安装命令
```
apt-get update
apt-get -y install libfontconfig1
```
如果是采用 docker 模式运行，则需要在 dockerfile 中添加如下配置，该命令适用于 debian 和 ubuntu 的 docker
```
RUN apt-get update && apt-get -y install libfontconfig1
```
:::

:::tip `提示`

 如果需要Runtime依赖部署，需要安装ASP.NET Core Runtime，如果是独立发布部署，则不需要安装Runtime

 下载链接:https://dotnet.microsoft.com/zh-cn/download/dotnet

:::


:::tip 精简发布文件

如果需要精简发布后的文件，也就是删除不必要的文件夹，可以编辑 Web 项目的 `.csproj` 并添加 `<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>`，如：

```cs showLineNumbers  {3}
<PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>
```

若无需生成 `.pdb` 文件，可以继续添加：

```cs showLineNumbers {2-3}
<PropertyGroup>
  <DebugType>none</DebugType>
  <DebugSymbols>false</DebugSymbols>
</PropertyGroup>
```

:::


## 34.2.1 关于 `Docker` 部署

在 `Docker` 中部署网站有两种方式：

- `发布后构建`：此方式是先发布网站后在再构建镜像，这样可以减少不必要的构建层，而且还能缩减镜像大小。**（推荐）**
- `编译+构建+发布`：也就是说在 `Dockerfile` 中配置网站从构建到发布的完整过程，此方式会速度慢，而且会产生冗余层，增加镜像大小。

## 34.2.2 两种方式构建

### 34.2.2.1 发布后构建


- 👉 编写 `Dockerfile`

```
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
COPY .  /app
WORKDIR /app
EXPOSE 80
#linux安装
RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ sid main contrib non-free" > /etc/apt/sources.list
RUN apt-get update && apt-get -y install libfontconfig1
ENTRYPOINT ["dotnet", "ThingsGateway.Web.Server.dll","--urls","http://*:7200"]

```



- 👉 将 `Dockerfile` 文件拷贝到发布根目录

将编写好的 `Dockerfile` 文件（注意 `D` 大写）拷贝到发布网站的根目录下。

:::tip `提示`

git仓库中已经包含 `Dockerfile` 文件

:::

- 👉 构建 `Docker` 镜像

在网站发布后的路径根目录下（必须含 `Dockerfile`）打开 `CMD/PowerShell` 只需构建命令：

```bash showLineNumbers
docker build -t 网站名称:网站版本号 .
```

:::important 特别注意

后端的 `.` 不能省略

:::

- 👉 启动镜像

```bash showLineNumbers
docker run --name 容器名称 -p 5000:80 --restart=always -d 网站名称:网站版本号
```

:::caution `.NET8` 中 `80` 端口问题

在使用 `.NET8`，默认的端口由原来的 `80` 端口变成了 `8080`。[查看相关说明](https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/containers/8.0/aspnet-port)

:::


- 👉 在 `Dockerfile` 所在路径构建

接下来的步骤和上述步骤一致，不再重复编写。